/*
CREDITS:
INFO - Frankensprite - a sprite made of parts of other sprites.
Just like frankenstein is a mashup of other people's limbs. Crazy, eh?

Sprites:
Frankensprite - Mike12, bits from 3DRealms (Shadow Warrior)
Projectile - ?

Sounds:
Up - ID (ET: Quake Wars)
Fire - ?
Reload - ID (Quake 2)
Time manipulations - Raven (Wolfenstein 3)
Mode change - ?
*/

ACTOR Comrade : Weapon 24509
{
   //$Category Weapons
   //$Title Comrade
   //$Sprite RTGGX0
   Inventory.PickupSound "misc/w_pkup"
   Inventory.PickupMessage "You got the ''Comrade'' time-wrangling grenade launcher! Shorter by breath - one day, closer to death! (6)"
   Obituary "%k rained upon %o a hailstorm of grenades - for the union!"
   Weapon.UpSound "Weapons/ComradeUp"
   Weapon.SelectionOrder 3
   Weapon.AmmoGive1 20
   Weapon.AmmoGive2 20
   Weapon.AmmoType "RawketAmmo"
   Weapon.AmmoType2 "NukeCellAmmo"
   Weapon.AmmoUse 1
   Weapon.AmmoUse2 1
   Weapon.Kickback 45
   Weapon.SlotNumber 6
   Weapon.BobStyle InverseSmooth
   Weapon.BobSpeed 1.4
   Weapon.BobRangeY 0.6
   Weapon.BobRangeX 1.2
   Scale 0.8
   States
   {
   Spawn:
      RTGG X -1
      Stop
   Ready:
      RTGG A 0 A_JumpIfInventory("NukeCellAmmo", 1, 2)
	  Goto UnTime
      RTGG A 0 A_JumpIfInventory("ComradeMode",1,"BouncerReady")
      RTGG A 1 A_WeaponReady(WRF_ALLOWRELOAD)
      Loop
   BouncerReady:
      RTGG F 1 A_WeaponReady(WRF_ALLOWRELOAD)
      Loop
   Deselect:
      RTGG A 0 A_JumpIfInventory("PowerComradeTimeFreeze",1,"BeforeIGo")
	  RTGG A 0 A_TakeInventory("ComradeDeselected",1)
      RTGG A 0 A_ZoomFactor(1)
      RTGG A 0 A_StopSound(6)
      RTGG A 1 A_Lower
      RTGG A 0 A_Lower
      Loop
   BeforeIGo:
	  RTGG A 0 A_GiveInventory("ComradeDeselected",1)
	  Goto UnTime
   Select:
      RTGG A 1 A_Raise
      Loop
   Fire:
      RTGG A 0 A_JumpIfInventory("ComradeMode",1,"BouncerFire")
      RTGF AAAA 0 A_FireCustomMissile("ComradeGrenade",frandom(7,-7),0,10,-5,0,frandom(3,-3))
      RTGF A 0 A_FireCustomMissile("ComradeGrenade",frandom(7,-7),1,10,-5,0,frandom(3,-3))
   Biscuits:
      RTGF A 0 A_Recoil(3)
      RTGF A 0 A_PlaySound("Weapons/ErasusAmbient",5|CHAN_NOPAUSE)
	  RTGF A 0 A_JumpIfInventory("PowerComradeTimeFreeze",1,2)
      RTGF A 0 A_PlaySound("Weapons/ComradeFire",1)
      RTGF A 0 A_SetAngle(Angle-1.5)
      RTGF A 0 A_SetPitch(Pitch-1.5)
	  RTGF A 0 A_JumpIfInventory("PowerComradeTimeFreeze",1,2)
      RTGF A 0 A_PlaySound("Weapons/ComradeReload",6)
	  RTGF A 0 A_JumpIfInventory("PowerComradeTimeFreeze",1,"TimeSequence")
      RTGF A 1 Bright A_ZoomFactor(0.98)
      RTGF A 0 A_SetAngle(Angle-1.0)
      RTGF A 0 A_SetPitch(Pitch-1.0)
      RTGF B 1 Bright A_ZoomFactor(0.985)
      RTGF A 0 A_SetAngle(Angle-0.5)
      RTGF A 0 A_SetPitch(Pitch-0.5)
      RTGG B 2 A_ZoomFactor(0.99)
      RTGG C 2 A_ZoomFactor(0.995)
      RTGG D 1 A_ZoomFactor(1)
      RTGG A 0 A_Refire
      RTGG E 1
      RTGG A 4
      Goto Ready
   TimeSequence:
      RTGF A 1 Bright A_ZoomFactor(0.78)
      RTGF A 0 A_SetAngle(Angle-1.0)
      RTGF A 0 A_SetPitch(Pitch-1.0)
      RTGF B 1 Bright A_ZoomFactor(0.785)
      RTGF A 0 A_SetAngle(Angle-0.5)
      RTGF A 0 A_SetPitch(Pitch-0.5)
      RTGG B 2 A_ZoomFactor(0.79)
      RTGG C 2 A_ZoomFactor(0.795)
      RTGG D 1 A_ZoomFactor(0.8)
      RTGG A 0 A_Refire
      RTGG E 1
      RTGG A 4
      Goto Ready
   BouncerFire:
      RTGF AAAA 0 A_FireCustomMissile("ComradeBounceGrenade",frandom(7,-7),0,10,-5,0,frandom(3,-3))
      RTGF A 0 A_FireCustomMissile("ComradeBounceGrenade",frandom(7,-7),1,10,-5,0,frandom(3,-3))
	  Goto Biscuits
   AltFire:
      RTGG A 0 A_PlaySound("Weapons/ComradeTimeFreezeStart",5|CHAN_NOPAUSE,1,0,ATTN_NONE)
      RTGG A 0 A_PlaySound("Weapons/ComradeTimeFreezeLoop",6|CHAN_NOPAUSE,1,1,ATTN_NONE)
      RTGG A 0 A_SetBlend("Cyan",0.3,28)
      RTGG A 1 A_ZoomFactor(0.98)
      RTGG A 1 A_ZoomFactor(0.97)
      RTGG A 1 A_ZoomFactor(0.94)
      RTGG A 1 A_ZoomFactor(0.92)
      RTGG A 1 A_ZoomFactor(0.9)
      RTGG A 1 A_ZoomFactor(0.875)
      RTGG A 1 A_ZoomFactor(0.85)
      RTGG A 1 A_ZoomFactor(0.825)
      RTGG A 1 A_ZoomFactor(0.815)
      RTGG A 1 A_ZoomFactor(0.8075)
      RTGG A 1 A_ZoomFactor(0.8)
      RTGG A 0 A_Print("Due to multiplayer issues, the Time Freezer has been disabled. Sorry.")
      RTGG A 0 A_PlaySound("Weapons/ComradeTimeFreezeStop",5|CHAN_NOPAUSE,1,0,ATTN_NONE)
      RTGG A 0 A_StopSound(6)
      RTGG A 0 A_SetBlend("Cyan",0.5,36)
      RTGG A 0 A_TakeInventory("PowerComradeTimeFreeze",1)
      RTGG A 1 A_ZoomFactor(0.8)
      RTGG A 1 A_ZoomFactor(0.825)
      RTGG A 1 A_ZoomFactor(0.85)
      RTGG A 1 A_ZoomFactor(0.875)
      RTGG A 1 A_ZoomFactor(0.9)
      RTGG A 1 A_ZoomFactor(0.92)
      RTGG A 1 A_ZoomFactor(0.94)
      RTGG A 1 A_ZoomFactor(0.97)
      RTGG A 1 A_ZoomFactor(0.98)
      RTGG A 1 A_ZoomFactor(0.99)
      RTGG A 1 A_ZoomFactor(1)
      RTGG A 10
      Goto Ready
/* //I'm sorry, but we really can't do this in multiplayer.
   AltFire:
      RTGG A 0 A_JumpIfInventory("PowerComradeTimeFreeze",1,"UnTime")
      RTGG A 0 A_PlaySound("Weapons/ComradeTimeFreezeStart",5|CHAN_NOPAUSE,1,0,ATTN_NONE)
      RTGG A 0 A_PlaySound("Weapons/ComradeTimeFreezeLoop",6|CHAN_NOPAUSE,1,1,ATTN_NONE)
      RTGG A 0 A_SetBlend("Cyan",0.3,28)
	  RTGG A 0 ACS_NamedExecuteAlways("Be sweet")
      RTGG A 0 A_GiveInventory("ComradeTimeStop",1)
      RTGG A 1 A_ZoomFactor(0.99)
	  RTGG A 0 A_GiveInventory("ComradeTimeStop",1)
      RTGG A 1 A_ZoomFactor(0.98)
      RTGG A 1 A_ZoomFactor(0.97)
      RTGG A 1 A_ZoomFactor(0.94)
      RTGG A 1 A_ZoomFactor(0.92)
      RTGG A 1 A_ZoomFactor(0.9)
      RTGG A 1 A_ZoomFactor(0.875)
      RTGG A 1 A_ZoomFactor(0.85)
      RTGG A 1 A_ZoomFactor(0.825)
      RTGG A 1 A_ZoomFactor(0.815)
      RTGG A 1 A_ZoomFactor(0.8075)
      RTGG A 1 A_ZoomFactor(0.8)
      RTGG A 10
      Goto Ready
   UnTime:
      RTGG A 0 A_PlaySound("Weapons/ComradeTimeFreezeStop",5|CHAN_NOPAUSE,1,0,ATTN_NONE)
      RTGG A 0 A_StopSound(6)
      RTGG A 0 A_SetBlend("Cyan",0.5,36)
      RTGG A 0 A_TakeInventory("PowerComradeTimeFreeze",1)
      RTGG A 1 A_ZoomFactor(0.8)
      RTGG A 1 A_ZoomFactor(0.825)
      RTGG A 1 A_ZoomFactor(0.85)
      RTGG A 1 A_ZoomFactor(0.875)
      RTGG A 1 A_ZoomFactor(0.9)
      RTGG A 1 A_ZoomFactor(0.92)
      RTGG A 1 A_ZoomFactor(0.94)
      RTGG A 1 A_ZoomFactor(0.97)
      RTGG A 1 A_ZoomFactor(0.98)
      RTGG A 1 A_ZoomFactor(0.99)
      RTGG A 1 A_ZoomFactor(1)
      RTGG A 10
	  RTGG A 0 A_JumpIfInventory("ComradeDeselected",1,"Deselect")
      Goto Ready
*/
   Reload: //Fire mode
      RTGG A 0 A_Quake(2, 9, 0, 2, "none")
      RTGG A 0 A_PlaySound("Weapons/ComradeMode",6)
      RTGG A 0 A_JumpIfInventory("ComradeMode",1,"UnReload")
      RTGG A 0 A_Print("Bouncer Mode.")
      RTGG A 0 A_GiveInventory("ComradeMode",1)
      RTGG A 0 A_WeaponReady(WRF_NOSWITCH|WRF_NOFIRE)
      RTGG A 1 Offset(1,33)
      RTGG A 0 A_WeaponReady(WRF_NOSWITCH|WRF_NOFIRE)
      RTGG A 1 Offset(3,35)
      RTGG A 0 A_WeaponReady(WRF_NOSWITCH|WRF_NOFIRE)
      RTGG A 1 Offset(4,36)
      RTGG A 0 A_WeaponReady(WRF_NOSWITCH|WRF_NOFIRE)
      RTGG A 1 Offset(6,38)
      RTGG A 0 A_WeaponReady(WRF_NOSWITCH|WRF_NOFIRE)
      RTGG A 1 Offset(4,36)
      RTGG A 0 A_WeaponReady(WRF_NOSWITCH|WRF_NOFIRE)
      RTGG A 1 Offset(3,33)
      RTGG A 0 A_WeaponReady(WRF_NOSWITCH|WRF_NOFIRE)
      RTGG A 1 Offset(1,33)
      RTGG A 0 A_WeaponReady(WRF_NOSWITCH|WRF_NOFIRE)
      RTGG A 1 Offset(0,32)
      RTGG FF 8 A_WeaponReady(WRF_NOSWITCH|WRF_NOFIRE)
	  Goto Ready
   UnReload:
      RTGG A 0 A_Print("Impact Mode.")
	  RTGG A 0 A_TakeInventory("ComradeMode",1)
      RTGG A 0 A_WeaponReady(WRF_NOSWITCH|WRF_NOFIRE)
      RTGG F 1 Offset(1,33)
      RTGG A 0 A_WeaponReady(WRF_NOSWITCH|WRF_NOFIRE)
      RTGG F 1 Offset(3,35)
      RTGG A 0 A_WeaponReady(WRF_NOSWITCH|WRF_NOFIRE)
      RTGG F 1 Offset(4,36)
      RTGG A 0 A_WeaponReady(WRF_NOSWITCH|WRF_NOFIRE)
      RTGG F 1 Offset(6,38)
      RTGG A 0 A_WeaponReady(WRF_NOSWITCH|WRF_NOFIRE)
      RTGG F 1 Offset(4,36)
      RTGG A 0 A_WeaponReady(WRF_NOSWITCH|WRF_NOFIRE)
      RTGG F 1 Offset(3,33)
      RTGG A 0 A_WeaponReady(WRF_NOSWITCH|WRF_NOFIRE)
      RTGG F 1 Offset(1,33)
      RTGG A 0 A_WeaponReady(WRF_NOSWITCH|WRF_NOFIRE)
      RTGG F 1 Offset(0,32)
	  RTGG AA 8 A_WeaponReady(WRF_NOSWITCH|WRF_NOFIRE)
	  Goto Ready
   }
}

ACTOR ComradeMode : Inventory { Inventory.MaxAmount 1 }
ACTOR ComradeDeselected : Inventory { Inventory.MaxAmount 1 }

ACTOR ComradeGrenade
{
   Obituary "%k launched upon %o a hailstorm of grenades."
   Radius 6
   Height 10
   Speed 45
   Damage 42
   Scale 0.8
   PROJECTILE
   +THRUGHOST
   +EXPLODEONWATER
   -NOGRAVITY
   Gravity 0.55
   States
   {
   Spawn:
      PAGG A 0
      PAGG A 0 ThrustThingZ(0, 15, 0, 1)
   Roflcopter:
      PAGG A 1 Bright A_SpawnItemEx("ComradeTrail",-7,0.1*random(8,12),0.1*random(8,12),0.1*random(1,3),0.1*random(1,3),0.1*random(1,3),random(0,359),0)
      Loop
   Death:
      TNT1 A 0 A_PlaySound("Weapons/BustExplo")
      TNT1 A 0 A_JumpIfInTargetInventory("NukerUpgrade",1,"NukerDeath")
      TNT1 A 0 A_Explode(150,128)
      TNT1 A 0 A_SpawnItemEx("MissileExplode",0,0,0,0,0,0,0,128,0)
      TNT1 BCD 5
      stop
   NukerDeath:
      TNT1 A 0 A_Explode(300,192)
      TNT1 A 1 A_SpawnItemEx("NukerMissileExplode",0,0,0,0,0,0,0,128,0)
      TNT1 BCD 5
      stop
   }
}

ACTOR ComradeTrail
{
	Scale 0.14
	Alpha 0.2
	Renderstyle Normal
	+CLIENTSIDEONLY
	+NOINTERACTION
	+DONTBLAST
	States
	{
	Spawn:	
		SMKE A 0
		SMKE ABCDEFGHI 2 A_FadeOut(0.01)
		SMKE JKLMNOPQ 2 A_FadeOut(0.02)
		Stop
	}
}

ACTOR ComradeBounceGrenade : ComradeGrenade
{
   Gravity 0.75
   Speed 30
   BounceSound "Weapons/ComradeBounce"
   BounceType Hexen
   BounceCount 5
   BounceFactor 0.75
   States
   {
   Spawn:
      PAGG A 0
      PAGG A 0 ThrustThingZ(0, 25, 0, 1)
   Roflcopter:
      PAGG A 1 Bright A_SpawnItemEx("ComradeTrail",-7,0.1*random(8,12),0.1*random(8,12),0.1*random(1,3),0.1*random(1,3),0.1*random(1,3),random(0,359),0)
      Loop
   }
}

actor PowerComradeTimeFreeze : PowerTimeFreezer
{
	Inventory.icon "TNT1A0"
}

actor ComradeTimeStop : PowerupGiver
{
	inventory.maxamount 0
	+INVENTORY.AUTOACTIVATE
	powerup.type "ComradeTimeFreeze"
	powerup.color Cyan, 0.08
	powerup.duration 0x7FFFFFFF
	states
	{
	Spawn:
		TNT1 A -1
		Stop
	}
}
